Til Home

2020-05-25-TIL

Fact

function combinations(array, n) {
    var lists = [], M = 1<<array.length;
    for( var i = 1 ; i < M ; ++i ) {
        var sublist = array.filter(function(c,k){return i>>k & 1});
        if( sublist.reduce(function(p,c){return p+c},0) <= n )
            lists.push(sublist);
    }
    return lists;
}

풀이법을 봤다. 이 풀이법에서 ”>>” 또는 ”<<”를 써서 이진수로 바꿔서 계산하는 것이 있었다. 솔직히 말해서 이해 못 했다.

  • 주말에 읽었던 interface와 enum을 적용하려고 했다. interface로 domain에 있는 Todos가 가져야 할 기본 골자를 정의했다. 그리고 CommandNumbers라는 interface를 만들어서 main 파일에 todoaplication implements CommandNumber을 해서 final static int 변수 이름 = 값 들을 정의한 것을 옮겼다. 마지막으로 코어 자바 9 pg 196에 나오는 방식처럼 enum instance 안에 열거에 정의된 메서드들 오버라이드 하는 방식으로 서브 controller을 만들어 보려고 했다.
  • 프로젝트에 치명적인 버그들이 있어서 급하게 고쳤다. 레지스터 할 때 피드백이 없었던 점, 업로드할 때 예전보다 느려져서 유저 입장에서 안된 줄 알고 업로드 클릭을 엄청 많이 한다. 그것을 방지하기 위해서 업로드 누르면 업로드하는 중인 팝업창을 만들었다. 마지막으로 사진 올릴 때 최대 크기를 제한했다.

Feeling

  • combination 진심 너무 어렵다. 예전에 combination 짜는 문제가 있었는데 그때도 못 풀었었다. i>>k & 1 ???? 뭔 뜻이야. 다음에 다시 봐야겠다.
  • 오늘 내가 계속 짜던 java todolist에 3,4 장에 나오는 interface와 enum을 적용해 보려고 했다. 내가 제대로 짜고 있는지도 모르겠다. 그래도 일단 해보고 있는데, 잘 됐으면 좋겠다.

Findings

  • 인터페이스는 반드시 구현해야 하는 메서드를 명시한다. 인터페이스를 implement를 하면 인터페이스가 supertype가 되고 그 인터페이스를 구현하는 클래스는 subtype다.
  • 인터페이스에 명시해야 되는 메서드들을 넣는 것 외에도 default 메서드들을 만들어서 subtype에서 명시를 안 하는 것들의 기본 값을 정의할 수 있다. 이 default 메서드들을 override가 가능하다.
  • cast로 변수들의 type를 강제로 변환 시킬 수 있지만 이때 type이 같아야만 변경할 수 있다. 예를 들어서 subtype를 supertype로 바꿀 때.
  • 람다는 JavaScript에 있는 arrow function이랑 비슷하다. 람다를 사용하는 핵심 목적은 지연 실행이다.
  • 클래스를 확장할 때 aClass extends bClass를 하면 된다. 이때 aClass가 sub class이고 bClass 가 super class이다. a Class가 bClass의 메서드들을 가져와서 쓸 수 있는 구조이다.
  • abstact를 씀으로써 이 abstract class를 extend를 하는 class는 abstract class 내에 있는 abstract 메서드들을 강제로 구현하도록 할 수 있다.
  • enum은 열거 타입을 쓸 때 쓴다. 이 열거 타입을 써서 배열처럼 쓸 수도 있고 case처럼 쓸 수도 있다.

Future action

  • 예전에 combination을 공부할 필요성을 느꼈을 때 바로 공부를 했었다면 그저께 시험에서 분명 풀 수 있었을 것이다. 필요성이 느끼면 바로바로 공부하는 게 좋다고 느껴진다. 아니면 최소한 어디에 todolist에 넣어서 시간 날 때마다 그 todo를 하나씩 체크하면서 기록하는 것도 나쁘지 않다고 생각한다.
  • 프로젝트를 다시 만지기 싫었는데 결국에 어쩔 수 없이 꼭 고쳐야 할 것 같아서 결국엔 다시 프로젝트 만지기 시작했다. 예전에 고쳐야 할 것 같던 것들을 까먹고 안 고쳐서 결국에 다시 뒤통수를 치게 됐다. 다음에는 그때그때 고치되, 못 고치거나 나중에 고쳐야 할 것들을 어디엔가 기록을 하자.

Feedback